package cn.myjerry.sort.innerType;


import java.util.Comparator;
import java.util.List;

public class Utils {
	
	/**
	 * 容器的排序 + Comparator
	 * @param list
	 */
	public static <T extends Comparable<T>> void sort(List<T> list,Comparator<T> com){
		//转成数组
		Object[] arr = list.toArray();
		sort(arr,com);
		for(int i=0;i<arr.length;i++){
			T set = list.set(i, (T) (arr[i]));
		}
	}
	
	/**
	 * 数组的排序(升序) + Comparator
	 * @param arr
	 */
	public static <T> void sort(Object[] arr,Comparator<T> com){
		boolean exant = true;
		for(int i=0;i<arr.length-1;i++){
			exant = true;
			for(int j=0;j<arr.length-1-i;j++){
				if(com.compare((T)(arr[j]), (T)(arr[j+1])) > 0){
					Object item = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = item;
					exant = false;
				}
			}
			if(exant){
				break;
			}
		}
	}
	
	/**
	 * 容器的排序
	 * @param list
	 */
	public static <T extends Comparable<T>> void sort(List<T> list){
		//转成数组
		Object[] arr = list.toArray();
		sort(arr, null);
		for(int i=0;i<arr.length;i++){
			list.set(i, (T) (arr[i]));
		}
	}
	
	/**
	 * 数组的排序（使用泛型方法）
	 * @param arr
	 */
	public static <T extends Comparable<T>> void sort(T[] arr){
		boolean exant = true;
		for(int i=0;i<arr.length-1;i++){
			exant = true;
			for(int j=0;j<arr.length-1-i;j++){
				if(((Comparable)arr[j]).compareTo(arr[j+1]) > 0){
					T item = arr[j];
					arr[j] = arr[j+1];
					arr[j+1] = item;
					exant = false;
				}
			}
			if(exant){
				break;
			}
		}
	}
	
	/**
	 * 数组的排序(升序)
	 * @param <T>
	 * @param arr
	 */
//	public static <T> void sort(T[] arr){
//		boolean exant = true;
//		for(int i=0;i<arr.length-1;i++){
//			exant = true;
//			for(int j=0;j<arr.length-1-i;j++){
//				if(((Comparable<T>)arr[j]).compareTo(arr[j+1]) > 0){
//					T item = arr[j];
//					arr[j] = arr[j+1];
//					arr[j+1] = item;
//					exant = false;
//				}
//			}
//			if(exant){
//				break;
//			}
//		}
//	}
}
